#-*- coding:utf-8 -*-
import getpass
import pickle
"""
密码输入三次错误报错的一个改进型
"""
#打开文件读入
def open_database():
    try:
        with open("passWord.txt", 'rb') as f:
            return pickle.load(f)
    except IOError as e:
        return False
    except Exception as e:
        raise e

#注册更新
def update_database(user_data):
    try:
        with open('passWord.txt','wb') as f:
              pickle.dump(user_data,f)
              return True
    except IOError as e:
        return False
    except Exception as e:
        raise e


#注册模块
def register():
    while True:
        username=input("请输入用户名：")
        user_data = open_database() if open_database() else {}
        if username in user_data.keys():
            print("用户名已经存在!")
        else:
            break
    user_passwd=getpass._raw_input("请输入密码：")
    user_data = {username:user_passwd}
    #user_data[username]=user_passwd
    #这里通过先读出来，随后添加新的注册名，再写入文本覆盖原来的信息。防止直接写入覆盖

    user_data[username]=user_passwd
    db_status=update_database(user_data)
    if not db_status:
        print("注册失败！")
    else:
        print("注册成功！")


def login():
        count = 0
        print("您有三次机会，3次输入错误后您的账号将被冻结！")
        # 不断循环
        while count<3:
            user_name=input("请输入您的账号：")
            user_passwd = getpass._raw_input("请输入您的密码：")
            user_data=open_database()
            #查看登录用户存在否
            if user_data.get(user_name) is None:
                print("用户不存在")
                break
            # 如果输入的密码和传入的密码相同，则跳出循环
            if user_passwd == user_data[user_name]:
                print("登陆成功!")
                break
            elif count<2:
                 print("您还有{}次机会".format(2-count))
            else:
                print("您已经超出错误次数，您的账号将被冻结")
                break
            count = count + 1


if __name__ == "__main__":
    # 输入文件参数，打开一个密码文件
    # 传入密码参数
    while True:
        user_choice=input("1 注册 2 登录 0 退出:")
        if user_choice=="1":
            register()
        elif user_choice=="2":
            login()
        else:
            break



